package com.elcl.util.viewutils;

import android.annotation.SuppressLint;
import android.os.Build;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import com.elcl.storage.ApplicationCache;

/**
 * @author lichunlin webview的一些基本属性
 */
public class WebViewUtils {

	/**
	 * 设置webview的基本的属性
	 */
	@SuppressLint("SetJavaScriptEnabled")
	public static void setViewBaseSettings(WebView webview) {
		webview.requestFocusFromTouch();// 有输入框的时候，点击可以获取焦点

		initWebViewSettings(webview);
		initWebViewClient(webview);
	}

	private static void initWebViewSettings(WebView webview) {
		WebSettings webSettings = webview.getSettings();
		webSettings.setJavaScriptEnabled(true);

		initWebViewAdapteraion(webview, webSettings);

		webSettings.setUseWideViewPort(true);// 将图片调整到适合webview的大小
		webSettings.setLoadWithOverviewMode(true);// 缩放至屏幕的大小

		webSettings.setSupportZoom(true);
		webSettings.setBuiltInZoomControls(true);
		webSettings.setTextSize(WebSettings.TextSize.LARGEST);
		webSettings.setDisplayZoomControls(false);
	}

	/**
	 * webview做的一些优化
	 */
	private static void initWebViewAdapteraion(WebView webview,
			WebSettings webSettings) {
		// 加载网络时，当发现图片会去加载，会影响webview的整体加载速度，设置的话，当全部数据加载完毕后，再去加载图片，4.4以上做率兼容
		if (Build.VERSION.SDK_INT >= 19) {
			webSettings.setLoadsImagesAutomatically(true);
		} else {
			webSettings.setLoadsImagesAutomatically(false);
		}

		// 开启硬件加速后，如果遮住的话，再出现的时候会闪现
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
			webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
		}
	}

	private static void initWebViewClient(final WebView webview) {
		webview.setWebViewClient(new WebViewClient() {
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				// 设置点击网页里面的链接在当前的webview里跳转
				view.loadUrl(url);
				return true;
			}

			@Override
			public void onReceivedSslError(WebView view,
					SslErrorHandler handler, android.net.http.SslError error) {
				// 设置webview处理https请求
				handler.proceed();
			}

			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				// 加载页面报错时的处理
				Toast.makeText(ApplicationCache.context,
						"加载页面报错!" + description, Toast.LENGTH_SHORT).show();
			}

			@Override
			public void onPageFinished(WebView view, String url) {
				super.onPageFinished(view, url);
				if (!webview.getSettings().getLoadsImagesAutomatically()) {
					webview.getSettings().setLoadsImagesAutomatically(true);
				}
			}
		});
	}

	public static void loadDataWithHtml(WebView webview, String html) {
		webview.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
	}

	/**
	 * 设置webview可以返回上一级
	 */
	public static void setWebViewGoBack(WebView webview) {
		if (webview.canGoBack()) {
			webview.goBack();
		}
	}

}
